iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 2
1

軟體開發在經過那麼長時間的發展,對於「命名」這件事從來都沒有一個定論過,一直都有一些很特別的命名發展出來。今天我們說一些有聽過或有看過的命名規則。

匈牙利命名法 (Hungarian notation)

匈牙利命名法在這個世紀初期還算是個很有名的命名法,簡單的說就是他要把這個參數的屬性放在名稱的最前面,例如:

int iCount = 10;

為什麼要這樣做呢?主要有幾個原因。

  1. 有些程式語言是沒有類型的,例如組合語言,因此開發人員只能從名稱上看出來它要用什麼屬性。
  2. 有些程式語言的宣告和開發段可能會隔很遠,在過去那個編輯器很不好用的年代,這是個快速讓開發人員知道參數類型的方法。
  3. 開發人員本身就是個老學究,所以把舊的命名規則帶到新的語言來。

目前其實在兩個地方還是看得到匈牙利命名法,例如ASP.Net,還是會看到像這樣的寫法:

if(txtUsername.Text == "" || txtPassword.Text == "")
  return false;

前面用txt就是暗示這個欄位是個"文字框"
另外一個地方是比較常見的Interface,目前習慣的做法還是這樣命名:

interface IUser

前面的I就是暗示這是個Interface

這種命名法在編輯器比較好用的語言,或者比較新式的開發方法己經比較少見,大部份的情況己經不會用到匈牙利命名法,即使是微軟曾經那麼喜歡用匈牙利命名法,目前的Code convention也是建議不要使用。
https://ithelp.ithome.com.tw/upload/images/20200902/20111458j0uL2aq50R.png

Pascal Case

Pascal Case是目前主流的命名法之一,主要就是讓所有的字母的首字母都是大寫,例如:

public class UserLoginHistory
{
}

這個方法普遍用在各種的程式語言中,主要是因為很容易分辨整個命名的意義,即使不是英語為母語的人士都能理解參數要表達的意思。也因為他是全首字大寫,因此比較常會用在class name或者相同層級的名稱,例如Enum:

public enum UserLevel
{
  Basic, Advanced, VIP
}

或者物件的公開屬性及方法名稱,也會使用Pascal Case

public class UserDetail
{
    public int UserName{ get; set; }
}

Camel Case

和Pascal Case相對的就是Camel Case,它把首字母的大寫改成小寫,其他字的首字母都是大寫,例如:

public void TestMethod()
{
    UserDetail userDetail = new UserDetail();
    userDetail.UserName = "John Doe";
}

因為class是Pascal Case,因此object name用Camel Case,就可以看出他們的相互關係。
雖然不能說是「相對的」,但通常Camel Case會成對的出現,只是看怎麼對比,例如Java的class name會用Pascal,但class下的方法會用Camel,C#則將所有class內的定義都使用Pascal,使用的時候才用Camel。

SCREAM CASE

大寫的驚訝,無論在那種語言都是誇張表現的一部份,SCREAM CASE這種全大寫的使用,也是在一些比較特別的情況。例如常數:

public class WorkingArea
{
    static final int MIN_WIDTH = 4;
    static final int MAX_WIDTH = 999;
    static final int GET_THE_CPU = 1;
}

在寫C語言的巨集或Preprocessor的時候,也會用到SCREAM CASE

#define MAX(a, b) ((a) > (b) ? (a) : (b))

如果有什麼需要特別吸引到大眾注意的時候,也會使用SCREAM CASE,例如Log的內容,或者輸出時要特別讓人注意時。不過也因為太吸引眼球,使用時要特別注意。

kebab-case & snake_case

有些命名規則,會將每個字用不同的分隔符號分開,常見的有連字符(-)或底線( _ ),這兩種都有著很好的可讀性。目前Kebab Case愈來愈常見:就是每個字用"-"分開,例如Vue.js,就推荐使用Kebab-Case

Vue.component('todo-item', {
  // ...
})

另外還有很多種的命名方法,但比較常見的就是以上幾種,但無論是那種命名法,最重要的目的就是可讀性。例如下面這個例子,就是一個非常不好的例子:在一個方法裡混用了各種的命名法:
https://ithelp.ithome.com.tw/upload/images/20200903/20111458LiukYL1jHX.jpg
因此如果團隊裡己經有訂定好的命名規則,就應該遵守那個規則:命名可以發揮創意,但不要發揮在命名法上面。如果不知道那個才對,應該向自己的主管或資深的同事請教,如果他們不置可否怎麼辦?

  1. 看過去的push history
  2. 用naming convention查相關語言推荐的方法
  3. 離職(不對!)
    你們公司有推荐的命名規則嗎?或者有什麼奇怪的規則呢?留言跟大家分享一下吧!

上一篇
Day 1 - Get a dictionary
下一篇
Day 3 -[名詞二]命名規則
系列文
邁向專業軟體工程師必修的英文課30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言